// 权限控制工具类
const whiteList = [
	'/pages/log-reg/login/login',
	'/pages/log-reg/register/register'
]

/**
 * 检查是否有权限访问指定页面
 * @param {string} url 页面路径
 * @returns {boolean} 是否有权限
 */
function hasPermission(url) {
	// 获取本地存储的token
	let token = uni.getStorageSync('token');
	
	// 提取纯净的页面路径（去除参数部分）
	const pureUrl = url.split('?')[0];
	console.log(url);
	
	// 在白名单中或有token则有权限
	return whiteList.indexOf(pureUrl) !== -1 || !!token;
}

/**
 * 获取当前页面路径
 * @returns {string} 当前页面路径
 */
function getCurrentPagePath() {
	const pages = getCurrentPages();
	if (pages && pages.length > 0) {
		return pages[pages.length - 1].route;
	}
	return '';
}

/**
 * 检查并处理权限
 * @returns {boolean} 是否有权限
 */
function checkAndHandlePermission() {
	const currentPath = getCurrentPagePath();
	if (!hasPermission(currentPath)) {
		uni.reLaunch({
			url: '/pages/log-reg/login/login'
		});
		return false;
	}
	return true;
}

// 初始化路由拦截器
function initInterceptors() {
	// 拦截navigateTo
	uni.addInterceptor('navigateTo', {
		invoke(e) {
			if (!hasPermission(e.url)) {
				uni.reLaunch({
					url: '/pages/log-reg/login/login'
				});
				return false;
			}
			return true;
		}
	});

	// 拦截switchTab
	uni.addInterceptor('switchTab', {
		invoke(e) {
			if (!hasPermission(e.url)) {
				uni.reLaunch({
					url: '/pages/log-reg/login/login'
				});
				return false;
			}
			return true;
		}
	});

	// 拦截redirectTo
	uni.addInterceptor('redirectTo', {
		invoke(e) {
			if (!hasPermission(e.url)) {
				uni.reLaunch({
					url: '/pages/log-reg/login/login'
				});
				return false;
			}
			return true;
		}
	});

	// 拦截reLaunch (除了跳转到登录页本身)
	uni.addInterceptor('reLaunch', {
		invoke(e) {
			if (e.url !== '/pages/log-reg/login/login' && !hasPermission(e.url)) {
				uni.reLaunch({
					url: '/pages/log-reg/login/login'
				});
				return false;
			}
			return true;
		}
	});
}

/**
 * 初始化H5端路由监听
 */
function initH5RouterListener() {
	// 仅在H5平台生效
	if (process.env.VUE_APP_PLATFORM === 'h5') {
		// 监听hash变化
		window.addEventListener('hashchange', checkAndHandlePermission);
		
		// 监听popstate事件（处理浏览器前进后退）
		window.addEventListener('popstate', checkAndHandlePermission);
	}
}

export default {
	hasPermission,
	checkAndHandlePermission,
	initInterceptors,
	initH5RouterListener
}
